在react中資料的傳遞都需要上下層傳遞,不過在大型專案之中,可能會因為傳遞的層級太多容易搞混或是程式碼過於複雜
redux:是一個全域的狀態管理工具,能管理整個網站需要的 State,
每個Component都有各自的State,當要嘗試共用的時候就會衍生出很多問題,例如:原本該放在child的State為了共用,需要搬到parent State,最後導致Parent Component擁有一堆State,於是redux在大型專案中就有其存在的必要了。
當所有的資料都能放在 Redux,需要資料的 Component,也直接從 Redux 取得,所以組件管理 state 變得更方便,而且也確保整個專案的資料都來自同一個地方。
Redux 在專案內的角色還能夠讓「畫面 Component」及「資料 Redux」分離。
如果我們在 Component 內寫下一堆關於獲取資料的 API 請求,那程式就會變得非常的亂,且發生問題時也不容易找到。
將畫面和資料區分出來,便不會使得 Component 內隨著專案越來越大變得亂七八糟。
Redux把更新邏輯轉為在reducer做處理,同時擁有composition與pure function的特性,使開發上更易實作。
官方的介紹:Redux是一個predictable的狀態管理套件,認識Redux之前,你必須要了解為什麼Redux是predictable(可預見):
綜合上述,predictable表示你可以輕易地掌握你使用這個action之後,state是如何改變的
Global state皆存在Single-state tree中
store.getState();
State在每次提出時,皆為read-only,唯一會改變State的方式就是使用action發起更新請求
store.dispatch({
type: 'UPDATE_SINGLE_USER',
payload: {
name: 'James',
intro: '123',
}
})
reducer,或是可以稱pure reducer,將每個更新邏輯都拆分的很細很單純,再加上都是pure的特色,降低了改A壞B的發生率:
function visibilityFilter(state = 'SHOW_ALL', action) {
switch (action.type) {
case 'SET_VISIBILITY_FILTER':
return action.filter
default:
return state
}
}
明日待續:
Redux基本應用
後天待續(如果redux講完的話)
利用react hook來實現redux